/**
 * @file drv_uart.h
 * @author your name (you@domain.com)
 * @brief uart 驱动头文件
 * @version 0.1
 * @date 2024-08-30
 * 
 * @copyright Copyright (c) 2024
 * 
 */
#ifndef _DRV_UART_H
#define _DRV_UART_H

#define UART1_RXBF_SIZE             32      /* uart receive buffer size */
#define UART2_RXBF_SIZE             32      /* uart receive buffer size */

typedef enum UartDevice
{
    GUART1 = 0,
    GUART2 = 1,
} UartDevice;

/**
 * @brief 初始化串口设备
 * 
 */
int n32_uart_init(void);

/**
 * @brief 从串口读取数据
 * @param uartx 串口设备号，UartDevice
 * @param buffer 数据读取缓冲区
 * @param length 指定读取长度
 * @return int >=0, 读取到的数据长度，<0, 错误码
 * 
 * 该函数将从指定设备号的设备缓冲区读取指定长度的数据，读取后将立即返回
 */
int uart_read(UartDevice uartx, void *buffer, unsigned int length);

/**
 * @brief 写数据到串口
 * 
 * @param uartx 串口设备号，UartDevice
 * @param buffer 数据输出缓冲区
 * @param length 数据长度
 * @return int 实际写入的数据长度
 */
int uart_write(UartDevice uartx, const void *buffer, unsigned int length);

#endif //_DRV_UART_H
